LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

desktop-robot

2022/7/20

桌面机器人

好久没有写博客了,今天有时间整理说说这学期的项目课。

项目灵感来自于稚晖君的电脑配件:https://www.bilibili.com/video/BV1ka411b76m


上学期,由于一些焊接问题,自制SOC失败,所以要使得产品有高性能的计算就必须要有上位机。

而现成的树莓派等上位机,体积仍然很大,很难集成到小型产品内部,所以上学期的项目课总体就做得很大。

受稚晖君的启发,采用USB外接高速Phy的方式通信,将所需图像以及其他数据,

通过通信的方式传到电脑,以电脑来作为计算的媒介。

想法很好,这样就可以将项目集成得很小,而且后续都是电脑开发,定制化程度高。

接下来简单回顾一下制作的过程。


USB通信

一开始,我是对USB通信完全没有了解的。

陷入了USB的HID(Human Interface Device)的路,后续才发现只需要采用虚拟串口就可以了。

更多的是电路焊接bug,各种虚焊识别不到。

不用钢网手涂锡膏,用风枪焊好后属于一种半虚不虚的状态,用久了就会虚,焊接能力还是不行

详细实现写在了这篇博客:https://www.bonbonn.shop/2022/04/10/stm32-usb-vpc-hs/


IIC舵机

通信调通之后,我就开始尝试复现稚晖君的舵机板

项目链接:https://github.com/peng-zhihui/ElectronBot/tree/main/1.Hardware/ServoDrive

但是我发现,需要从电机引两条线以及电位器引三条线焊到板子,最后成型的效果不是很美观,如下:

所以我就尝试修改板子的形状,使得板子能够像原舵机板一样,

将电机口和电位器口的位置对应到板子上,像插件一样集成到舵机内部。

第一次尝试把板子压缩到最小,从9.6 ​ ×\times 18.4 进一步优化成 9 ×\times 17.6 (毫米制)。

最终实物焊接到舵机上的效果如下:

已经是较为满意的结果了,虽然还是大了一点点,舵机的盖子盖不上。

(不过最终因为IIC通信等一些问题,舵机板也没有最终被用上,代码也没在后续板上验证)

详细实现写在了这篇博客:https://www.bonbonn.shop/2022/07/20/iic-servo/


USB传图片

因为打算用python进行后续开发,所以通信也是用python。

虚拟串口很方便,方便在于你只需要当做一个串口使用即可,并且可以无视波特率。

通过图像位数转换后(博客链接:https://www.bonbonn.shop/2022/07/20/image-digit-conversion/

将数据传给单片机进行显示屏的显示即可。

思路很简单,但是实现起来就出现了一些问题。

比如图像数据太大,用uint8_t的数组存储图像数据,数组大小为240*240*2=115200

会出现raw溢出的现象,因为target中默认是0x1c000 即114688

需要把IRAW1调大,把IRAW2调小

又比如帧率不够,图像长宽均为240,总数据量为240*240*16=921600bit,单片机显示屏显示速率不够

(USB高速通信速率可以达到几十甚至几百Mbps,通信速率是肯定够的)

第一个优化的想法就是,传的数据是正方形的图片,但是显示只需要显示圆形区域,

不过代码优化后发现帧率还是不能满足实时性。

后来发现商家提供的显示屏显示代码是软件实现SPI,我换成了硬件实现SPI,速率瞬间就上去了。


动态表情

表情制作就不多说了,用PS绘制关键部位,然后用Ae制作动画,放一张眨眼关键帧图: